package service_metier;

import java.io.File;
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import javax.faces.component.UIData;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import model.Activite;
import model.Comedie;
import model.Genre;
import model.Personne;
import model.Realisation;
import model.Video;

import ctx.ContexteUtilisateur;


public class ModificationVideo {

	private ContexteUtilisateur contexteUtilisateur;
	

	private List<String> typeActivite;
	private List activitePossible;
	private String activiteSelect;
	
	private List genrePossible;
	private List genreSelect;
	private String date ;
	
	
	
	
	// Mise � jour du contexte utilisateur apr�s modification du titre d'un film
	
	public void validerModifFilmTitre(ValueChangeEvent evt){
		if(((String) evt.getOldValue()).equals((String)evt.getNewValue())) return;
		contexteUtilisateur.getVideoSelect().setTitre((String) evt.getNewValue());		
	}
	
	// Mise � jour du contexte utilisateur apr�s modification de la date d'un film
	public void validerModifFilmDate(ValueChangeEvent evt) throws ParseException{
		
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy") ;
		String oldValue = (String) evt.getOldValue() ;
		Date newValue = (Date) evt.getNewValue() ;
		String newValueString = sdf.format(newValue) ;
		GregorianCalendar test = new GregorianCalendar(newValue.getYear()+1900, newValue.getMonth()+1, newValue.getDate());
		
		if(oldValue.equals(newValueString)) return;
		contexteUtilisateur.getVideoSelect().setDate(test);
		
	}
	
	// Mise � jour du contexte utilisateur apr�s modification de la jaquette
	public void validerModifFilmJaquette(ValueChangeEvent evt){
		if(((String) evt.getOldValue()).equals((String)evt.getNewValue())) return;
		File f = new File((String) evt.getNewValue());
		if(f.canRead()){
			contexteUtilisateur.getVideoSelect().setJaquette((String) evt.getNewValue());
		}else{
			contexteUtilisateur.getVideoSelect().setJaquette("./default.jpg");
		}	
		
	}
	
	// Mise � jour du contexte utilisateur apr�s modification du genre
	public void validerModifFilmGenre(ValueChangeEvent evt){
		if(genreSelect!=null){
			for(Object s : genreSelect){
				for(Genre g : Genre.values()){
					if(((String)s).equals(g.getValue())){
						if(!contexteUtilisateur.getVideoSelect().getListeGenre().contains(g)) contexteUtilisateur.getVideoSelect().getListeGenre().add(g);
					}
				}
			}
		}
	}
	
		
	// Mise � jour du contexte utilisateur apr�s suppression d'une personne
	public void validerModifFilmEnleverPersonne(ActionEvent evt){
		Personne p =(Personne)((UIData) evt.getComponent().getParent()).getRowData();
		
		for(Activite a : contexteUtilisateur.getVideoSelect().getListeActivite()){
			if(a.getListePersonne().contains(p)) contexteUtilisateur.getVideoSelect().getListeActivite().remove(contexteUtilisateur.getVideoSelect().getListeActivite().indexOf(a));
		}
		
	}
	
	// Mise � jour du contexte utilisateur apr�s ajout d'une personne
	public String validerModifFilmAjoutPersonne(){
		List<Personne> lTemp = new ArrayList<Personne>();
		lTemp.add(contexteUtilisateur.getPersonneSelect()); 		
		Activite aTemp = null;
		if(activiteSelect.equals("comedie")){
			
			aTemp = new Comedie();
			aTemp.setListePersonne(lTemp);
			
			
		}else if(activiteSelect.equals("realisation")){
			aTemp = new Realisation();
			aTemp.setListePersonne(lTemp);
			
		}
		if(contexteUtilisateur.getVideoSelect().getListeActivite()==null){
			List<Activite> listeActi = new ArrayList<Activite>();
			listeActi.add(aTemp);
			contexteUtilisateur.getVideoSelect().setListeActivite(listeActi);
		}else{
			contexteUtilisateur.getVideoSelect().getListeActivite().add(aTemp);
		}
		
		return "";
	}
	
	// Mise � jour du contexte utilisateur
	public String validerModifFilmFinal(){
		
		if(contexteUtilisateur.isWatchingAjouterFilm()){
			contexteUtilisateur.getListeAllFilm().add(contexteUtilisateur.getVideoSelect());
			contexteUtilisateur.setWatchingDetailFilm(true);
		}else{	
			System.out.println(contexteUtilisateur.getVideoSelect().getDateString());
			contexteUtilisateur.getListeAllFilm().set(contexteUtilisateur.getIndexFilmModif(), contexteUtilisateur.getVideoSelect());
		}
		//contexteUtilisateur.getListeAllFilm().set(contexteUtilisateur.getIndexFilmModif(), contexteUtilisateur.getVideoSelect());
		contexteUtilisateur.updateListePersonne();
		contexteUtilisateur.updateListeRecherchePersonne();
		contexteUtilisateur.updateListeRechercheVideo();
		contexteUtilisateur.setWatchingModifFilm(false);
				
		return "fin";
	}
	
	public void setContexteUtilisateur(ContexteUtilisateur contexteUtilisateur) {
		this.contexteUtilisateur = contexteUtilisateur;
	}
	public ContexteUtilisateur getContexteUtilisateur() {
		return contexteUtilisateur;
	}

	public void setActivitePossible(List activitePossible) {
		this.activitePossible = activitePossible;
	}
	public List getActivitePossible() {
		if (activitePossible == null) {  
	    	activitePossible = new ArrayList();  
	    	activitePossible.add(new SelectItem("comedie", "Comedie"));  
	    	activitePossible.add(new SelectItem("realisation", "Realisation"));  
	    	
	    }  
	    return activitePossible;  
	}
	public void setActiviteSelect(String activiteSelect) {
		this.activiteSelect = activiteSelect;
	}
	public String getActiviteSelect() {
		return activiteSelect;
	}

	public void setTypeActivite(List<String> typeActivite) {
		this.typeActivite = typeActivite;
	}

	public List<String> getTypeActivite() {
		List<String> typeAct = new ArrayList<String>();
		typeAct.add("comedie");
		typeAct.add("realisation");
		return typeAct;
	}

	public void setGenrePossible(List genrePossible) {
		this.genrePossible = genrePossible;
	}

	public List getGenrePossible() {
		if (genrePossible == null) {  
			genrePossible = new ArrayList();  
			for(Genre g : Genre.values()){
				genrePossible.add(new SelectItem(g.getValue(),g.getValue()));				
			}
	    	
	    }  
	    return genrePossible;  
	}

	public void setGenreSelect(List genreSelect) {
		this.genreSelect = genreSelect;
	}

	public List getGenreSelect() {
		return genreSelect;
	}

	
	public void setDate(String date) {
		this.date = date;
	}
	
	public String getDate() {
		return date;
	}
	
	
}
